iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
AI/ ML & Data

使用 jq 處理資料系列 第 30

Day30: jq alternative operator 學無止境

  • 分享至 

  • xImage
  •  

昨天我們運用學到的錯誤處理方法,完善了我們的颱風資訊程式。並且我們修改 data_processing.jq 裡面的 content/1 函式,讓颱風名稱可以做為參數傳入。今天我們繼續完善檢視颱風警報資料的程式吧!

對話中學習

師傅:今天是最後一堂課。回顧這三十天,你學到了什麼?

徒弟:哇,師傅,真的已經三十天了嗎?感覺時間過得好快...我學到了很多,從 JSON 的基礎表達式取屬性值表達式取陣列元素jq 表達式的組合,有使用颱風警報的資料實作練習,還認識了錯誤處理用法。最重要的是,我學會了如何思考表達式的流程運用所學解決問題。

師傅:很好。今天我們來學習兩個新概念,然後完成颱風資料的練習。

徒弟:好的,師傅。我準備好了。

師傅:首先,學習如何從命令列帶入參數。使用 --arg name value

徒弟:這聽起來很有用。可以舉個例子嗎?

師傅:看好了。jq -n --arg tname KRATHON "$tname"

徒弟:哦!這是把颱風名稱作為參數傳入 main.jq 對吧?

師傅:沒錯。接下來,學習使用 // 設定預設值。

徒弟:預設值?這是用來做什麼的?

師傅:當某個值不存在時,提供替代選項。例如:
$direction[.movingDirection] // .movingDirection

徒弟:我明白了!如果 $direction 中沒有對應的值,就直接使用 .movingDirection 本身。

師傅:很好。待會就用這兩個新概念來完善我們的颱風資料處理。

徒弟:好的,謝謝您,師傅。這三十天的學習真的讓我獲益良多。我...我有點捨不得結束這個課程。

師傅:學習永無止境。這只是開始。

徒弟:您說得對。我會繼續努力的。師傅,我能問您最後一個問題嗎?

師傅:說吧。

徒弟:您為什麼選擇教我 jq 和 JSON?

師傅:因為它們是強大的工具。掌握它們,你就能處理各種資料。

徒弟:我明白了。謝謝您,師傅。我會永遠記住您的教導。

師傅:去吧,用你學到的知識創造些有意義的東西。

徒弟:我會的,師傅。再見,謝謝您這三十天來的教導。

師傅:再見,徒弟。記住,學習永不停止。


--arg name value 由命令列參數設定變數

我們直接修改 krathon2024_json.bat ,加入 --arg tname KRATHON,如下:

jq -c -r -s --arg tname KRATHON -f main.jq direction.json typhoon1005.json beaufort_wind.json

同時,也修改 jebi2024_json.bat ,加入 --arg tname JEBI,如下:

jq -c -r -s --arg tname JEBI -f main.jq direction.json typhoon0930.json beaufort_wind.json

上面我們已經把命令列的參數加入了,還有最後一步,就是 main.jq 要接收這個參數。

include "data_processing"; process_input | header, [ content($tname) ][] | @tsv

如此一來, 顯示山陀兒的 krathon2024_json.bat,和顯示燕子的 jebi2024_json.bat,就可以共用 main.jq 主程式了。😄👍

// 替代運算元 (alternative operator)

{表達式} // "預設值" 只要左邊的表達式回傳值是 null 或 false ,就會回傳 // 右方的值。簡單案例可以用 jq 'null // "有一天", false // "小菜", "被端走了" // "走著"' 試試看結果。參考下圖:

https://ithelp.ithome.com.tw/upload/images/20241013/20078389TnJ7l1L8bE.png

昨天顯示燕子的 jebi2024_json.bat 執行後,有發現 "北北西" 這類的方向還沒有定義在 direction.json 裡面。那麼就讓它顯示原本的 "NNE" 吧。

我們來 data_processing.jq 裡面的 content/1,從 $direction[.movingDirection] 修改成 $direction[.movingDirection] // .movingDirection。如此一來,就能看到 "NNE" 這樣的結果。如下圖:

https://ithelp.ithome.com.tw/upload/images/20241013/20078389ZI1SEAFDcn.png

結論

今天,我們已經將颱風警報資料的 jq 程式修改得差不多、告一段落了。感性的話被師徒倆說完了,我們直接參考修改的 程式碼 😝。

三十天,何等的毅力和恆心~感謝自己沒有放棄😝🎉。給一起練習的各位大大的讚😝👍


上一篇
Day29: 應用錯誤處理
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言